﻿using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Debug;
using System;
using System.Collections.Generic;
using System.Text;

namespace hoemwork
{
    class SqlDbContext : DbContext
    {
        // 分别使用OnModelCreating()和Data Annotations，完成以下配置：
        //将之前的User类名改为Register，但仍然能对应表User
        //将之前的User属性Name改成UserName，但仍然能对应表User的列Name
        //将Name的长度限制为256
        //Password不能为空
        //将User表的主键设置在Name列上
        //User类中的属性FailedTry不用存储到数据库中
        //给CreateTime属性添加一个非聚集唯一索引
        //CreateTime不能小于2000年1月1日
        public DbSet<Student> Students { get; set; }
        public DbSet<User> Users { get; set; }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            string connStr = "";
            optionsBuilder
                .UseMySQL(connStr)
                
#if  DEBUG
                .EnableSensitiveDataLogging()

#endif
                  .UseLoggerFactory(new LoggerFactory(
                    new ILoggerProvider[]
                    {
                        new DebugLoggerProvider()
                    }));


            base.OnConfiguring(optionsBuilder);
        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            //modelBuilder.Entity<Student>()
            //    .HasCheckConstraint("CK_Age", "Age Between 0 AND 150")
            //    .ToTable("TB_Student")
            //    .HasKey(s => new { s.id })
            //    ;
            //modelBuilder.Entity<Student>()
            //    .Property(m => m.Oncall).HasColumnType("NVARCHAR(50)");
            //modelBuilder.Entity<Major>()
            //    ;
            //modelBuilder.Entity<Student>(s =>
            //{
            //    s.Property(m => m.Oncall).HasColumnType("NVARCHAR(50)");
            //    s.Property(m => m.Name).HasMaxLength(128).IsRequired();

            //});
           // 将User的主键改回为Id
            modelBuilder.Entity<User>(u =>
            {

                u.Ignore(u => u.FailedTry);
               
                u.HasKey(u => u.id);
                u.HasIndex(u => u.CreateTime).IsUnique();
                u.HasCheckConstraint("CK_CreateTime", "CreateTime >= '2020-01-01'");
            });

            base.OnModelCreating(modelBuilder);
        }
    }
}
